package beanstao.util;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Method;

/**
 * 该类是用来模拟.net中的委托机制，通过反射实现。
 * 
 * @author beanstao@google.com 
 */
public class EventHandler implements ActionListener
{

	// 组件所在的对象
	private Object object = null;

	// 受到委托的方法名
	private String methodName = null;

	/**
	 * 构造函数
	 * 
	 * @paramform 组件所在的窗体对象
	 * @parammethodName 受到委托的方法名
	 */
	public EventHandler(Object object, String methodName)
	{
		this.object = object;
		this.methodName = methodName;
	}

	/**
	 * 事件处理委托方法
	 */
	@Override
	public void actionPerformed(ActionEvent e)
	{
		// 得到对象的类型
		Class<?> formType = object.getClass();
		try
		{
			// 得到指定委托方法的类型
			Method method = formType.getMethod(methodName, new Class[] { e.getClass() });
			// 调用指定的方法
			method.invoke(object, new Object[] { e });
		}
		catch (Exception ex)
		{
			return;
		}
	}

	// void main()
	// {
	// this.addActionListener(new EventHandler(this, "btnSearch_Click"));
	// }
	//
	// public void btnSearch_Click(ActionEvent e)
	// {
	// }
}
